/**
 * 387. 字符串中的第一个唯一字符
 * https://leetcode-cn.com/problems/first-unique-character-in-a-string/
 */
public class Solutions_387 {
    public static void main(String[] args) {
        String str = "leetcode";  // output: 0
//        String str = "loveleetcode";  // output: 2

        int result = firstUniqChar2(str);
        System.out.println(result);
    }

    /**
     * 解法一：哈希表（4ms）
     */
    public static int firstUniqChar(String s) {
        // 1. 统计各字符出现的次数
        int[] counts = new int[26];
        char[] arr = s.toCharArray();
        for (char c : arr) {
            counts[c - 'a'] ++;
        }
        // 2. 遍历字符数组，返回第一个出现次数为 1 的字符所在索引
        for (int i = 0; i < arr.length; i++) {
            if (counts[arr[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 解法二：字符串查找
     * indexOf() 函数
     */
    public static int firstUniqChar2(String s) {
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 定位到的索引相同时，说明字符 c 不重复
            if (s.indexOf(c) == s.lastIndexOf(c)) {
                return i;
            }
        }
        return -1;
    }
}
